#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'wshu'
__version__ = '1.0'
"""
    ***********************************
    *  @filename : __init__.py.py
    *  @Author : wshu
    *  @CodeDate : 2020/3/26 15:49
    *  @Software : PyCharm
    ***********************************
    SECTOTAL_V1.0/ 爬虫系统架构优化
    Edit in: 2020/3.30:09
"""
'''
-------------系统总体架构----------------
# 1. 采用分布式主从结构，设置1个Master服务器和多个Slave服务器
# 2. Master管理Redis数据库和分发下载任务，Slave部署Scrapy抓取网页和解析提取项目数据
# 3. 服务器环境是centos7操作系统，Master服务器安装Redis数据库和Graphite(第三方监控工具)
# 4. Slave安装Scrapy和Redis客户端。初期系统功能划分：
#  (1). 数据抓取模块 <数据抓取模块包含浏览器调用，网页下载，正文内容提取，图片提取，防反爬，数据存储>
#  (2). 数据处理模块 <数据处理模块包含数据清洗，提取正文的编码转换>
----------------------------------------

-------------动态网页抓取设计-------------
# 1. 调用有界面浏览器，(selenium)
# 2. 使用无界面浏览器，(casperjs, phantomjs)
预留待解决次功能，目前需求对动态抓取不大
----------------------------------------

-------------分布式设计------------------
: 本系统爬虫采用广度优先爬取策略, 根据用户需求，可限制爬取页面数量
# Scrapy从Redis中获取urls，Redis中存储了Scrapy工程的request信息
# 根据这些信息可以掌握任务情况和爬虫状态，分配任务时便于使用均衡负载，克服爬虫的性能瓶颈
问题解决：
> 当大批量数据导致Redis存储或者访问速度遇到问题时，可以通过增大Redis集群树和爬虫集群数量改善
> Scrapy-Redis分布式方案解决了中断续抓和数据去重的问题，爬虫重新启动后，会按照Redis队列中url抓取，已经抓取的url将自动过滤
----------------------------------------

----------Graphite监测组件---------------
: 这是基于Django开发的一个Web应用，用来监测 CPU、内存、I/O利用率、网络吞吐量和延迟
这里之所以用到Graphite，是为了实时监测。暂且先用着，在没有找到比较好的方案
Graphite初期使用：
    1. 监测 系统下载信息，日志信息，调度信息，爬虫运行信息，爬虫异常信息，文件数量
    2. 获得item数量，最大请求深度和爬取页面总数量。
----------------------------------------

-----------------项目总结----------------
以上是SECTOTAL爬虫系统设计部分，之前是一直单机开多进程爬取
因爬取量和爬取速度的局限性，改版采用Scrapy-Redis分布式
'''
